/**
 * Created with JetBrains PhpStorm. User: xuheng Date: 12-12-19 Time: 下午4:55 To
 * change this template use File | Settings | File Templates.
 */
(function() {
	var title = $G("J_title"), titleCol = $G("J_titleCol"), caption = $G("J_caption"), sorttable = $G("J_sorttable"), autoSizeContent = $G("J_autoSizeContent"), autoSizePage = $G("J_autoSizePage"), tone = $G("J_tone"), me, preview = $G("J_preview");

	var editTable = function() {
		me = this;
		me.init();
	};
	editTable.prototype = {
		init : function() {
			var colorPiker = new UE.ui.ColorPicker({
						editor : editor
					}), colorPop = new UE.ui.Popup({
						editor : editor,
						content : colorPiker
					});

			title.checked = editor.queryCommandState("inserttitle") == -1;
			titleCol.checked = editor.queryCommandState("inserttitlecol") == -1;
			caption.checked = editor.queryCommandState("insertcaption") == -1;
			sorttable.checked = editor.queryCommandState("enablesort") == 1;

			var enablesortState = editor.queryCommandState("enablesort"), disablesortState = editor
					.queryCommandState("disablesort");

			sorttable.checked = !!(enablesortState < 0 && disablesortState >= 0);
			sorttable.disabled = !!(enablesortState < 0 && disablesortState < 0);
			sorttable.title = enablesortState < 0 && disablesortState < 0
					? lang.errorMsg
					: '';

			me.createTable(title.checked, titleCol.checked, caption.checked);
			me.setAutoSize();
			me.setColor(me.getColor());

			domUtils.on(title, "click", me.titleHanler);
			domUtils.on(titleCol, "click", me.titleColHanler);
			domUtils.on(caption, "click", me.captionHanler);
			domUtils.on(sorttable, "click", me.sorttableHanler);
			domUtils.on(autoSizeContent, "click", me.autoSizeContentHanler);
			domUtils.on(autoSizePage, "click", me.autoSizePageHanler);

			domUtils.on(tone, "click", function() {
						colorPop.showAnchor(tone);
					});
			domUtils.on(document, 'mousedown', function() {
						colorPop.hide();
					});
			colorPiker.addListener("pickcolor", function() {
						me.setColor(arguments[1]);
						colorPop.hide();
					});
			colorPiker.addListener("picknocolor", function() {
						me.setColor("");
						colorPop.hide();
					});
		},

		createTable : function(hasTitle, hasTitleCol, hasCaption) {
			var arr = [], sortSpan = '<span>^</span>';
			arr.push("<table id='J_example'>");
			if (hasCaption) {
				arr.push("<caption>" + lang.captionName + "</caption>")
			}
			if (hasTitle) {
				arr.push("<tr>");
				if (hasTitleCol) {
					arr.push("<th>" + lang.titleName + "</th>");
				}
				for (var j = 0; j < 5; j++) {
					arr.push("<th>" + lang.titleName + "</th>");
				}
				arr.push("</tr>");
			}
			for (var i = 0; i < 6; i++) {
				arr.push("<tr>");
				if (hasTitleCol) {
					arr.push("<th>" + lang.titleName + "</th>")
				}
				for (var k = 0; k < 5; k++) {
					arr.push("<td>" + lang.cellsName + "</td>")
				}
				arr.push("</tr>");
			}
			arr.push("</table>");
			preview.innerHTML = arr.join("");
			this.updateSortSpan();
		},
		titleHanler : function() {
			var example = $G("J_example"), frg = document
					.createDocumentFragment(), color = domUtils
					.getComputedStyle(domUtils.getElementsByTagName(example,
									"td")[0], "border-color"), colCount = example.rows[0].children.length;

			if (title.checked) {
				example.insertRow(0);
				for (var i = 0, node; i < colCount; i++) {
					node = document.createElement("th");
					node.innerHTML = lang.titleName;
					frg.appendChild(node);
				}
				example.rows[0].appendChild(frg);

			} else {
				domUtils.remove(example.rows[0]);
			}
			me.setColor(color);
			me.updateSortSpan();
		},
		titleColHanler : function() {
			var example = $G("J_example"), color = domUtils.getComputedStyle(
					domUtils.getElementsByTagName(example, "td")[0],
					"border-color"), colArr = example.rows, colCount = colArr.length;

			if (titleCol.checked) {
				for (var i = 0, node; i < colCount; i++) {
					node = document.createElement("th");
					node.innerHTML = lang.titleName;
					colArr[i].insertBefore(node, colArr[i].children[0]);
				}
			} else {
				for (var i = 0; i < colCount; i++) {
					domUtils.remove(colArr[i].children[0]);
				}
			}
			me.setColor(color);
			me.updateSortSpan();
		},
		captionHanler : function() {
			var example = $G("J_example");
			if (caption.checked) {
				var row = document.createElement('caption');
				row.innerHTML = lang.captionName;
				example.insertBefore(row, example.firstChild);
			} else {
				domUtils.remove(domUtils.getElementsByTagName(example,
						'caption')[0]);
			}
		},
		sorttableHanler : function() {
			me.updateSortSpan();
		},
		autoSizeContentHanler : function() {
			var example = $G("J_example");
			example.removeAttribute("width");
		},
		autoSizePageHanler : function() {
			var example = $G("J_example");
			var tds = example.getElementsByTagName(example, "td");
			utils.each(tds, function(td) {
						td.removeAttribute("width");
					});
			example.setAttribute('width', '100%');
		},
		updateSortSpan : function() {
			var example = $G("J_example"), row = example.rows[0];

			var spans = domUtils.getElementsByTagName(example, "span");
			utils.each(spans, function(span) {
						span.parentNode.removeChild(span);
					});
			if (sorttable.checked) {
				utils.each(row.cells, function(cell, i) {
							var span = document.createElement("span");
							span.innerHTML = "^";
							cell.appendChild(span);
						});
			}
		},
		getColor : function() {
			var start = editor.selection.getStart(), color, cell = domUtils
					.findParentByTagName(start, ["td", "th", "caption"], true);
			color = cell && domUtils.getComputedStyle(cell, "border-color");
			if (!color)
				color = "#DDDDDD";
			return color;
		},
		setColor : function(color) {
			var example = $G("J_example"), arr = domUtils.getElementsByTagName(
					example, "td").concat(
					domUtils.getElementsByTagName(example, "th"),
					domUtils.getElementsByTagName(example, "caption"));

			tone.value = color;
			utils.each(arr, function(node) {
						node.style.borderColor = color;
					});

		},
		setAutoSize : function() {
			var me = this;
			autoSizePage.checked = true;
			me.autoSizePageHanler();
		}
	};

	new editTable;

	dialog.onok = function() {
		editor.__hasEnterExecCommand = true;

		var checks = {
			title : "inserttitle deletetitle",
			titleCol : "inserttitlecol deletetitlecol",
			caption : "insertcaption deletecaption",
			sorttable : "enablesort disablesort"
		};
		editor.fireEvent('saveScene');
		for (var i in checks) {
			var cmds = checks[i].split(" "), input = $G("J_" + i);
			if (input["checked"]) {
				editor.queryCommandState(cmds[0]) != -1
						&& editor.execCommand(cmds[0]);
			} else {
				editor.queryCommandState(cmds[1]) != -1
						&& editor.execCommand(cmds[1]);
			}
		}

		editor.execCommand("edittable", tone.value);
		autoSizeContent.checked ? editor.execCommand('adaptbytext') : "";
		autoSizePage.checked ? editor.execCommand("adaptbywindow") : "";
		editor.fireEvent('saveScene');

		editor.__hasEnterExecCommand = false;
	};
})();